// let p = new Promise((resolve, reject) => {})
import thunk from 'redux-thunk';
//1. 引入 redux 中的 createStore 函数
import {createStore, applyMiddleware} from 'redux';

//2. 声明初始化数据  『可以是任意类型的值』
let init = 10;

//3. 创建状态仓库对象  createStore 是一个高阶函数
// 参数: 是一个函数 『reducer』函数  加工函数,  加工处理状态
// state: 状态数据
// action: 是一个对象, 一般的结构为: {type:'jia', data: 10}    {type: '买', data: '矿泉水'}  {type:'扔', data: '这些垃圾'}
let store = createStore((state=init, action) => {
    //根据操作的类型与数据, 对 state 数据进行操作
    switch(action.type){
        // {action: 'jia', data: 10}
        case 'jia':
           return state + action.data;   
        // {action: 'jian', data: 5}
        case 'jian':
            return state - action.data;
        //其他操作  如果是其他操作, 就直接返回 state 的值
        default: 
            return state;
    }
}, applyMiddleware(thunk));

//封装函数 返回 jia Action 对象
export function jiaAction(data){
    return { type: 'jia', data: data }
}

//封装函数 返回 jian Action 对象
export function jianAction(data){
    return {type: 'jian', data: data}
}

//声明 action 创建函数 //异步修改数据
export function  asyncJiaAction(data){
    return () => {
        setTimeout(() => {
            //修改数据
            store.dispatch(jiaAction(data));
        }, 1000);
    }
}

//暴露数据
export default store;


//测试
//增加 100
// store.dispatch({type: 'jia', data: 100}); // dispatch 分配任务
// store.dispatch({type: 'jia', data: 20}); // dispatch 分配任务
// store.dispatch({type: 'jia', data: 10}); // dispatch 分配任务
// store.dispatch({type: 'jian', data: 40})

//调用 action 函数
// store.dispatch(jiaAction(30));
// store.dispatch(jiaAction(40));
// store.dispatch(jianAction(10));

// //查看状态结果
// console.log(store.getState()); // getState  获取内部的状态值





